PersistListenerCollection.java
package org.codefilarete.stalactite.engine.listener;
import java.util.ArrayList;
import java.util.List;
public class PersistListenerCollection<C> implements PersistListener<C> {
private final List<PersistListener<C>> persistListeners = new ArrayList<>();
public List<PersistListener<C>> getPersistListeners() {
return persistListeners;
}
@Override
public void beforePersist(Iterable<? extends C> entities) {
persistListeners.forEach(listener -> listener.beforePersist(entities));
}
@Override
public void afterPersist(Iterable<? extends C> entities) {
persistListeners.forEach(listener -> listener.afterPersist(entities));
}
@Override
public void onPersistError(Iterable<? extends C> entities, RuntimeException runtimeException) {
persistListeners.forEach(listener -> listener.onPersistError(entities, runtimeException));
}
public void add(PersistListener<? extends C> persistListener) {
this.persistListeners.add((PersistListener<C>) persistListener);
}
/**
* Move internal listeners to given instance.
* Useful to aggregate listeners into a single instance.
* Please note that as this method is named "move" it means that listeners of current instance will be cleared.
*
* @param persisTListener the target listener on which the one of current instance must be moved to.
*/
public void moveTo(PersistListenerCollection<C> persisTListener) {
persisTListener.persistListeners.addAll(this.persistListeners);
this.persistListeners.clear();
}
}